// FileReader共有4种读取方法：urtab
// 1.readAsArrayBuffer(file)：将文件读取为。
// 2.readAsBinaryString(file)：将文件读取为二进制字符串
// 3.readAsDataURL(file)：将文件读取为Data URL
// 4.readAsText(file, [encoding])：将文件读取为文本，encoding缺省值为'UTF-8'
var wb; //读取完成的数据
var rABS = false; //是否将文件读取为二进制字符串
var dormitory; //学生宿舍信息
var record; //出勤记录
var day; //考勤日期
var dormitoryKeys = []; //宿舍表格标题
var recordKeys = []; //考勤记录表格标题
var firstTab = false;
var secondTab = false;
var thirdTab = false;
var fourTab = false;
var dorkey;
//页面加载时就执行的方法
window.onload = readData;

function readData() {
    dormitory = [];
    //获取学生宿舍缓存数据
    var string = localStorage.getItem('dormitory');
    var data = string.slice(1, string.length - 1);
    var text = data.split('},');
    var arr = text.join('}-');
    var res = arr.split('-');
    console.log(res[0]);
    //\如果缓存存在，则处理数据
    if (data) {
        for (let i = 0; i < res.length; i++)
            dormitory.push(JSON.parse(res[i]))
        console.log(dormitory)
            //处理宿舍数据
        handleStudent(dormitory);
    }
}
//使用layui
layui.use(['table', 'element', 'upload'], function() {
        var table = layui.table;
        var $ = layui.jquery,
            element = layui.element; //Tab的切换功能，切换事件监听等，需要依赖element模块
        //新增选项卡
        window.addtap = function(title, content, id) {
                //新增一个Tab项
                element.tabAdd('demo', {
                    title: title,
                    content: content,
                    id: id
                })
            }
            //切换选项卡
        window.changeTab = function(id) {
                //切换到指定Tab项
                element.tabChange('demo', id);
            }
            // 表格初始化 ------------------
        window.init = function(id, title, data) {
            let new_data = $.extend(true, [], data); // 复制原始数据
            table.render({
                elem: id,
                cellMinWidth: 100,
                cols: [title],
                data: new_data,
                limit: 9
            });
        }

    })
    //读取导入学生宿舍文件的数据
function readFile_1(obj) {
    //清除缓存
    localStorage.removeItem('dormitory');
    if (!obj.files) {
        return;
    }
    //显示进度条
    document.getElementById('progress_1').style.display = "block";
    //显示表格内容
    // document.getElementsByClassName('tabBox')[0].style.display = "block";
    var f = obj.files[0];
    var reader = new FileReader();
    //显示文件名
    document.getElementById("filename_1").innerHTML = obj.files[0].name
        // fileReader实现图片加载进度条
    var progressSpanObj = document.getElementsByClassName('progressSpan')[0];
    var progressTextObj = document.getElementsByClassName('progressText')[0];
    //开始读取文件时触发
    reader.onloadstart = function(e) {
            progressTextObj.innerText = "正在读取文件(0%)...";
        }
        //读取进度事件
    reader.onprogress = function(e) {
        // console.log(Math.round(e.loaded / e.total * 100));
        var precent = Math.round(e.loaded / e.total * 100);
        progressSpanObj.style.width = precent / 100 * 200 + 'px';
        progressTextObj.innerText = '正在读取文件(' + precent + '%)...';
    }
    reader.onload = function(e) {
        progressTextObj.innerText = '文件读取完成(100%)';
        var data = e.target.result;
        //手动转化
        if (rABS) {
            wb = XLSX.read(btoa(fixdata(data)), {
                type: 'base64'
            });
        } else {
            wb = XLSX.read(data, {
                type: 'binary'
            });
        }
        //wb.SheetNames[0]是获取Sheets中第一个Sheet的名字
        //wb.Sheets[Sheet名]获取第一个Sheet的数据
        // 转为json数据
        var res = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]);
        //设置永久缓存
        localStorage.setItem('dormitory', JSON.stringify(res));
        //处理学生宿舍数据
        handleStudent(res);
        // document.getElementById("demo_1").innerHTML = JSON.stringify(XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]));
        //行数
        // console.log(wb.SheetNames.length);
    }
    reader.onerror = function(e) {
        progressTextObj.innerText = "文件读取出错误!";
    }
    if (rABS) {
        reader.readAsArrayBuffer(f);
    } else {
        reader.readAsBinaryString(f);
    }
}
//读取导入文件2的数据
function readFile_2(obj) {
    if (!obj.files) {
        return;
    }
    //显示进度条
    document.getElementById('progress_2').style.display = "block";
    //显示表格内容
    // document.getElementsByClassName('tabBox')[0].style.display = "block";
    var f = obj.files[0];
    var reader = new FileReader();
    //显示文件名
    document.getElementById("filename_2").innerHTML = obj.files[0].name
        // fileReader实现图片加载进度条
    var progressSpanObj = document.getElementsByClassName('progressSpan')[1];
    var progressTextObj = document.getElementsByClassName('progressText')[1];
    //开始读取文件时触发
    reader.onloadstart = function(e) {
            progressTextObj.innerText = "正在读取文件(0%)...";
        }
        //读取进度事件
    reader.onprogress = function(e) {
        // console.log(Math.round(e.loaded / e.total * 100));
        var precent = Math.round(e.loaded / e.total * 100);
        progressSpanObj.style.width = precent / 100 * 200 + 'px';
        progressTextObj.innerText = '正在读取文件(' + precent + '%)...';
    }
    reader.onload = function(e) {
        progressTextObj.innerText = '文件读取完成(100%)';
        var data = e.target.result;
        //手动转化
        if (rABS) {
            wb = XLSX.read(btoa(fixdata(data)), {
                type: 'base64'
            });
        } else {
            wb = XLSX.read(data, {
                type: 'binary'
            });
        }
        //wb.SheetNames[0]是获取Sheets中第一个Sheet的名字
        //wb.Sheets[Sheet名]获取第一个Sheet的数据
        // 转为json数据
        var res = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]);
        handleAttendance(res);
        // document.getElementById("demo_2").innerHTML = JSON.stringify(XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]));
        //行数
        // console.log(wb.SheetNames.length);
    }
    reader.onerror = function(e) {
        progressTextObj.innerText = "文件读取出错误!";
    }
    if (rABS) {
        reader.readAsArrayBuffer(f);
    } else {
        reader.readAsBinaryString(f);
    }
}
//文件流转BinaryString
function fixdata(data) {
    var o = "",
        l = 0,
        w = 10240;
    for (; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)));
    o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)));
    return o;
}
//处理学生宿舍名单
function handleStudent(res) {
    dormitoryKeys = [];
    //保存宿舍名单数组
    dormitory = res;
    //获取宿舍名单的key值
    var keys = Object.keys(dormitory[0]);
    for (var i = 0; i < keys.length; i++) {
        dormitoryKeys.push({
            field: keys[i],
            title: keys[i],
        })
    }
    //显示表格数据
    init('#table_1', dormitoryKeys, dormitory);
    // if (!firstTab) {
    //     //新增选项卡
    //     var table = "<table id='table_1'></table>";
    //     addtap('学生宿舍名单', table, 1);
    //     //生成表格显示到页面
    //     init('#table_1', dormitoryKeys, dormitory);
    //     firstTab = true;
    // } else {
    //     //更新表格显示到页面
    //     init('#table_1', dormitoryKeys, dormitory);
    // }
    // console.log(dormitory)
    //定位到此选项卡
    changeTab(1);
}
//导入学生门禁考勤表
function handleAttendance(res) {
    recordKeys = [];
    //保存门禁考勤记录
    record = res;
    //获取考勤记录的key值
    var keys = Object.keys(record[0]);
    for (var i = 0; i < keys.length; i++) {
        recordKeys.push({
            field: keys[i],
            title: keys[i],
        })
    }
    if (!secondTab) {
        //新增选项卡
        var table = "<table id='table_2'></table>";
        addtap('门禁考勤表', table, 2);
        //生成表格显示到页面
        init('#table_2', recordKeys, record);
        secondTab = true;
    } else {
        //更新表格显示到页面
        init('#table_2', recordKeys, record);
    }
    //定位到此选项卡
    changeTab(2);
    //记录时间
    let date = record[0].刷卡时间;
    day = date.split(' ')[0];
}
//修改record表的key值，方便取出
function changeRecord(data) {
    let newRecord = [];
    //新数组
    let key = ['地址', '姓名', '班级', '出入类型', '刷卡时间', '状态'];
    data.forEach((item, index) => {
        //新数组里的新对象
        let obj = {};
        //key值替换  
        for (let i = 0; i < key.length; i++) {
            obj[key[i]] = item[Object.keys(item)[i]];
        }
        newRecord.push(obj);
    })
    console.log(newRecord);
    return newRecord;
}
// 导出异常状态的考勤文件
function handleunData() {
    let data = []
    if (dormitory && record) {
        let newRecord = changeRecord(record);
        // console.log(newRecord);
        for (let i = 0; i < dormitory.length; i++) {
            let inOrout = '';
            for (let j = newRecord.length - 1; j >= 0; j--) {
                if (newRecord[j].姓名 == dormitory[i].姓名 && newRecord[j].班级 == dormitory[i].班级)
                    inOrout = newRecord[j].出入类型
            }
            dormitory[i]['日期'] = day;
            //请先将excel文件按时间从晚到早排序
            //如果最后一次为“进门”，则判断学生正常回寝
            if (inOrout == '出门') {
                dormitory[i]['考勤情况'] = '未归'
            } else if (inOrout == '进门') {
                dormitory[i]['考勤情况'] = '正常'
            } else {
                dormitory[i]['考勤情况'] = '未进出'
            }
            if (dormitory[i]['考勤情况'] == '未归')
                data.push(dormitory[i])
        }
        console.log(dormitory)
            //创建选项卡
        addThirdtab(data);
        //导出文件
        fnExport(data);
    } else {
        alert('请先上传齐文件！');
    }
}
//导出全部状态的考勤文件
function handleData() {
    if (dormitory && record) {
        //处理上传的数据
        let newRecord = changeRecord(record);
        for (let i = 0; i < dormitory.length; i++) {
            let inOrout = '';
            for (var j = newRecord.length - 1; j >= 0; j--) {
                if (newRecord[j].姓名 == dormitory[i].姓名 && newRecord[j].班级 == dormitory[i].班级)
                    inOrout = newRecord[j].出入类型
            }
            dormitory[i]['日期'] = day;
            //请先将excel文件按时间从晚到早排序
            //如果最后一次为“进门”，则判断学生正常回寝
            if (inOrout == '出门') {
                dormitory[i]['考勤情况'] = '未归'
            } else if (inOrout == '进门') {
                dormitory[i]['考勤情况'] = '正常'
            } else {
                dormitory[i]['考勤情况'] = '未进出'
            }
        }
        console.log(dormitory);
        //新增选项卡
        addFourtab(dormitory);
        //导出文件
        fnExport(dormitory);
    } else {
        alert('请先上传齐文件！');
    }
}

function addThirdtab(data) {
    //获取宿舍考勤记录的key值
    var keys = Object.keys(data[0]);
    var dormitoryRecordKeys = [];
    for (let i = 0; i < keys.length; i++) {
        dormitoryRecordKeys.push({
            field: keys[i],
            title: keys[i],
        })
    }
    //新增选项卡
    if (!thirdTab) {
        //新增选项卡
        var table = "<table  id='table_3'></table>";
        addtap('学生宿舍异常情况考勤表', table, 3);
        //生成表格显示到页面
        init('#table_3', dormitoryRecordKeys, data);
        thirdTab = true;
    } else {
        //更新表格显示到页面
        init('#table_3', dormitoryRecordKeys, data);
    }
    //定位到此选项卡
    changeTab(3);
}

function addFourtab(data) {
    //获取宿舍考勤记录的key值
    var keys = Object.keys(data[0]);
    var dormitoryRecordKeys = [];
    for (let i = 0; i < keys.length; i++) {
        dormitoryRecordKeys.push({
            field: keys[i],
            title: keys[i],
        })
    }
    //新增选项卡
    if (!fourTab) {
        //新增选项卡
        var table = "<table  id='table_4'></table>";
        addtap('学生宿舍全部情况考勤表', table, 4);
        //生成表格显示到页面
        init('#table_4', dormitoryRecordKeys, data);
        fourTab = true;
    } else {
        //更新表格显示到页面
        init('#table_4', dormitoryRecordKeys, data);
    }
    //定位到此选项卡
    changeTab(4);
}
//导出学生出勤文件
function fnExport(data) {
    console.log(data);
    // 新建空workbook，然后加入worksheet
    const ws = XLSX2.utils.json_to_sheet(data)
        // 遍历每个格子
    for (let key in ws) {
        //给每个格子修改样式
        ws[key].s = {
            //字体水平居中、垂直居中、自动换行、缩进
            alignment: {
                horizontal: 'center', //水平居中
                vertical: 'center', //垂直居中
                wrapText: true //自动换行
            }
        }
    }
    // 设置每列的列宽，10代表10个字符，注意中文占2个字符
    ws['!cols'] = [{
            wch: 10
        }, {
            wch: 10
        }, {
            wch: 15
        }, {
            wch: 8
        }, {
            wch: 8
        }, {
            wch: 20
        }, {
            wch: 20
        }, {
            wch: 10
        }]
        // 新建book
        // const wb = XLSX2.utils.book_new()
        //     // 生成xlsx文件(book,sheet数据,sheet命名)
        // XLSX2.utils.book_append_sheet(wb, ws, '数据详情')
        //     //     // 写文件(book,xlsx文件名称)
        // XLSX2.writeFile(wb, day + '学生宿舍考勤情况表.xlsx')
        //     //导出文件
    openDownloadDialog(sheet2blob(ws), day + '学生宿舍考勤情况表.xlsx');
}